Early computer systems were monolithic, single-processor systems that executed only a single task at each point in time. The early computer systems lacked operating systems and basic programming facilities such as assemblers and compilers. During the first several decades of the computer revolution, many of the basic single-system components of computer systems were developed and evolved to produce capable, operating-system-controlled, multi-tasking computer systems. For another decade, rapid evolution of processor technology, data-storage technologies, memory, and communications technologies led to dramatic increases in the capabilities and capacities of single-processor computer systems. Ultimately, however, in order to achieve even greater capabilities and capacities, computer-system designers turned to multi-processor systems and then to more complex, distributed computing systems comprising aggregations of many intercommunicating computer systems. This turn towards distributed computing was facilitated by the development of distributed locking methods for controlling access to distributed computing resources, distributed operating systems, and high-bandwidth electronic communications. During the past few decades, extremely large cloud-computing facilities have been developed and commercialized to the point that computational bandwidth and data-storage capacity are provided to customers of large cloud-computing providers much as electrical power and water are provided to customers of utility companies. Cloud-computing facilities often employ hundreds, thousands, or more networked and often geographically distributed multi-processor servers that are controlled, by virtualization technology, to produce hierarchical layers of virtualized computing facilities. The development and evolution of cloud-computing facilities has greatly increased available computational bandwidths and data-storage capacities for computer-services users, but has also increased management overheads and complexities to the point that continued upward scaling of virtual data centers is now encountering a variety of technological constraints and barriers. Designers, developers, administrators, and users of cloud-computing facilities and other large distributed computing systems therefore continue to seek new approaches to implementing distributed systems and managing distributed systems to provide easier management and greater scalability.